/**
 ******************************************************************************
 * COPYRIGHT(C) USTC-ROBOWALKER
 * @file    vision.h
 * @author  Glorill 1615688664@qq.com
 * @brief
 * @date    2022-1-17
 * @version 1.0
 *
 ******************************************************************************
 */
#ifndef __VISION_H__
#define __VISION_H__

#include <stdint.h>

class C_VISION
{
    private:

    public:
        /*发送给视觉的数据结构体*/
        typedef struct
        {

            float pitch_speed; //当前pitch角速度，单位 度每秒
            float yaw_speed;   //当前yaw角速度，单位 度每秒
            float pitch_angle; //当前pitch角速度，单位 度
            float yaw_angle;   //当前yaw角速度，单位 度
            uint16_t msgflag;  //从低位开始
                               //第0位 表示敌方颜色，0表示敌方为红，1表示敌方为蓝
                               //第1位 表示是否开启自瞄
                               //第2位 表示是否击打能量机关

            /*可能需要的标志：自身是否处于小陀螺状态*/
        } SendTypeDef;

        SendTypeDef SendData;

        /*接收自视觉的数据结构体*/
        typedef struct
        {
            /*测得目标偏差的角度*/
            int16_t delta_pitch; //单位-18000~18000对应-180°~180°
            int16_t delta_yaw;   //单位-18000~18000对应-180°~180°
            /*预测目标偏差的角度*/
            int16_t predicted_delta_pitch; //单位-18000~18000对应-180°~180°
            int16_t predicted_delta_yaw;   //单位-18000~18000对应-180°~180°
            /*目标的距离*/
            int16_t target_distance; //单位1000对应1米
            /*预测目标速度*/
            int16_t predicted_pitch_v;
            int16_t predicted_yaw_v;

            int32_t msg_cnt; //消息计数
            int16_t new_msg; //新消息标志
                             /*可能需要的变量*/
                             // int16_t fire_delay;//下次发射的延迟 单位毫秒
                             // uint16_t msgflag;//各种信息标志，如敌方是否处于小陀螺状态

        } ReceiveTypeDef;

        ReceiveTypeDef ReceiveData;

        void send(void);
        void update(uint8_t can_rx_data[]);
};

#endif
